package api

import (
	"context"
	"encoding/json"
	"net/http"
	"time"

	"frigate/internal/raftnode"
	"frigate/utils"
)

// Server 提供 HTTP API 服务
type Server struct {
	node   *raftnode.Node
	server *http.Server
}

// NewServer 创建一个新的 HTTP API 服务器
func NewServer(node *raftnode.Node, addr string) *Server {
	handler := http.NewServeMux()

	s := &Server{
		node: node,
		server: &http.Server{
			Addr:    addr,
			Handler: handler,
		},
	}

	// 注册状态接口
	handler.HandleFunc("/status", s.handleStatus)

	return s
}

// Start 启动 HTTP API 服务器
func (s *Server) Start() error {
	go func() {
		utils.Logger.Info().Str("addr", s.server.Addr).Msg("Starting HTTP API server")
		if err := s.server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
			utils.Logger.Error().Err(err).Msg("HTTP API server error")
		}
	}()
	return nil
}

// Stop 停止 HTTP API 服务器
func (s *Server) Stop() error {
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()
	return s.server.Shutdown(ctx)
}

// handleStatus 处理状态查询请求
func (s *Server) handleStatus(w http.ResponseWriter, r *http.Request) {
	status := map[string]string{
		"role": s.node.GetRole(),
	}

	w.Header().Set("Content-Type", "application/json")
	json.NewEncoder(w).Encode(status)
}
